package com.situ.music.service;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.support.annotation.Nullable;
import android.util.Log;


import com.situ.music.activity.MainActivity;
import com.situ.music.activity.MusicPlayAcitvity;

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

public class MusicService extends Service {
    private static final String TAG = "MusicService";
    // Android提供的音乐播放器的类，可以实现播放、暂停等功能
    private MediaPlayer mediaPlayer;

    @Override
    public void onCreate() {
        super.onCreate();
        mediaPlayer = new MediaPlayer();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG, "onBind");
        // 当Activity绑定上service之后，会自动调用onBind方法，返回new出来的对象
        return new MusicContrll();
    }

    // 这个类里面定义Service提供的功能
    public class MusicContrll extends Binder{
        /**
         * 传入播放的mp3路径，开启播放
         * @param path
         */
        public void init(String path) {
            try {
                // NullPointerException null.方法  null.属性
                mediaPlayer.reset();
                // 设个播放的音频路径
                mediaPlayer.setDataSource(path);
                mediaPlayer.prepare();
                mediaPlayer.start();
                // 开启定时器
                startTimer();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        /**
         * 实现每隔500毫秒更新播放的进度
         */
        private void startTimer() {
            // 创建一个定时器
            Timer timer = new Timer();
            // 定时任务
            TimerTask timerTask = new TimerTask() {
                @Override
                public void run() {
                    if (mediaPlayer == null) {
                        return;
                    }
                    // 拿到歌曲的总长度
                    int duration = mediaPlayer.getDuration();
                    // 获取当前的播放位置
                    int currentPosition = mediaPlayer.getCurrentPosition();
                    Log.d(TAG, "duration: " + duration);
                    Log.d(TAG, "currentPosition: " + currentPosition);
                    // 在Service或者线程里面，是不能直接更新主线程（UI线程）中的UI组件
                    Bundle bundle = new Bundle();
                    bundle.putInt("duration", duration);
                    bundle.putInt("currentPosition", currentPosition);
                    Message message = MusicPlayAcitvity.handler.obtainMessage();
                    message.setData(bundle);
                    MusicPlayAcitvity.handler.sendMessage(message);
                }
            };
            // 定时器延迟5毫秒，每隔500毫秒执行TimerTask这个任务
            timer.schedule(timerTask, 5, 500);
        }

        /**
         * 暂停->播放
         */
        public void play() {
            Log.d(TAG, "play");
            mediaPlayer.start();
        }

        /**
         * 播放->暂停
         */
        public void pause() {
            Log.d(TAG, "pause");
            mediaPlayer.pause();
        }

        /**
         * 返回当前的播放状态
         * @return
         */
        public boolean isPlaying() {
            return mediaPlayer.isPlaying();
        }


        /**
         * 拖动改变SeekBar的位置
         * @param progress
         */
        public void seekTo(int progress) {
            mediaPlayer.seekTo(progress);
        }
    }

    @Override
    public boolean onUnbind(Intent intent) {
        System.out.println("MusicService.onUnbind()");
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("MusicService.onDestroy()");
        // 如果已经关闭，就不需要做处理
        if (mediaPlayer == null) {
            return;
        }

        // 如果正在循环播放，首先停止这个音乐
        if (mediaPlayer.isLooping()) {
            mediaPlayer.stop();
        }

        // 释放资源
        mediaPlayer.release();
        mediaPlayer = null;

    }



}
